package net.servir.capacidades.web.controller;

import java.util.LinkedList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.ArchivoBancoPregunta;
import net.servir.capacidades.model.BancoPregunta;
import net.servir.capacidades.model.CONSTANT;
import net.servir.capacidades.model.xls.XlsColumnConfig;
import net.servir.capacidades.model.xls.XlsTableConfig;
import net.servir.capacidades.model.xls.XlsWorkbookConfig;
import net.servir.capacidades.model.xls.XlsWorksheetConfig;
import net.servir.capacidades.service.BancoPreguntaService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UploadBancoPreguntaController {

	@Autowired
	private BancoPreguntaService bancoPreguntaService;

	
	@RequestMapping("/uploadBancoPregunta.htm")
	public @ModelAttribute("documento")
	ArchivoBancoPregunta asociarDocumento(HttpServletRequest request) {
		
		String resultadoCargaArchivo="";
		ArchivoBancoPregunta obj = new ArchivoBancoPregunta();
		
		Number idBancoPregunta = 0;
		BancoPregunta bancoPregunta = null;

		HttpSession session = request.getSession();
		String codSession =session.getId();
		
		//Number idSolicitud = null;
		String mensajeUsuario = "";
		if (request.getParameter("id_banco_pregunta") != null && !request.getParameter("id_banco_pregunta").equals("")) 
			idBancoPregunta = Integer.parseInt(request.getParameter("id_banco_pregunta"));

		if(idBancoPregunta != null && idBancoPregunta.intValue() != 0)			
			bancoPregunta = bancoPreguntaService.getBancoPregunta(idBancoPregunta);
		
		String accion = request.getParameter("accion");
		if (request.getParameter("mensaje_usuario") != null)
			mensajeUsuario = request.getParameter("mensaje_usuario");
		
		//*********************************************************
		//Configuramos los parametros para la exportacion a Excel.
		//*********************************************************		
		XlsWorkbookConfig xlsWorkbookConfig = new XlsWorkbookConfig();
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_PREGUNTA,PREGUNTA,FILA_EXCEL,LOG_CARGA from tmp_load_pregunta WHERE cod_session = '").append(codSession).append("'");
		sql.append(" AND LOG_CARGA is not null");
		sql.append(" ORDER BY FILA_EXCEL");
		
		List<XlsColumnConfig> columns = new LinkedList<XlsColumnConfig>();
		columns.add(new XlsColumnConfig("ID_PREGUNTA","Cod Pregunta","INTEGER",15));
		columns.add(new XlsColumnConfig("PREGUNTA","Pregunta","STRING",100));
		columns.add(new XlsColumnConfig("FILA_EXCEL","Fila en Excel","INTEGER",12));
		columns.add(new XlsColumnConfig("LOG_CARGA","Observaciones","STRING",100));		
		
		List<XlsTableConfig> tables = new LinkedList<XlsTableConfig>();
		tables.add(new XlsTableConfig(sql.toString(),columns));
		
		List<XlsWorksheetConfig> sheets = new LinkedList<XlsWorksheetConfig>();
		sheets.add(new XlsWorksheetConfig("Observados",tables));
		
		xlsWorkbookConfig.setName("Observaciones");
		xlsWorkbookConfig.setSheets(sheets);		
		
		session.setAttribute(CONSTANT.KEY_CFG_EXCEL_EXPORT, xlsWorkbookConfig);
		//*********************************************************
		
		
		
		if(accion != null && !accion.equals(""))
		{
			if(accion.equals("GRABAR"))
			{
				bancoPreguntaService.procesarImportacionPreguntas(codSession,idBancoPregunta);
				mensajeUsuario = "Datos grabados exitosamente";
			}			
		}	
		//Obtenemos el resumen de los datos cargados
		obj.setMostrar_resumen(0);
		bancoPreguntaService.setResumenCargaPreguntas(codSession,obj);
		obj.setId_banco_pregunta(idBancoPregunta);
		
		obj.setMensaje_usuario(mensajeUsuario);
		
		return obj;
	} 	
}
